import axios from 'axios'
import { useUserStore } from '@/stores'
import { FrownOutlined } from '@ant-design/icons-vue'
import { h } from 'vue'
import { notification, Button } from 'ant-design-vue'
import { message } from 'ant-design-vue'
import router from '@/router'
const baseURL = '/aPi'

const instance = axios.create({
  // TODO 1. 基础地址，超时时间
  baseURL,
  timeout: 10000
})

// 请求拦截器
instance.interceptors.request.use(
  (config) => {
    // TODO 2. 携带token
    const useStore = useUserStore()
    if (useStore.token) {
      config.headers.adminToken = useStore.token
    }
    return config
  },
  (err) => Promise.reject(err)
)

// 响应拦截器
instance.interceptors.response.use(
  async (res) => {
    const contentType = res.headers['content-type']
    if (
      contentType &&
      contentType.includes(
        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
      )
    ) {
      // 如果是文件下载，直接返回响应
      return res
    } else {
      // 处理非文件下载的响应
      if (res.data.code === 1) {
        return res
      } else {
        console.log('111', res.data)
        if (res.data.type && res.data.type === 'application/json') {
          message.error('该活动暂无人员报名，无法导出')
          return
        }
        return Promise.reject(res.data)
      }
    }
  },
  (err) => {
    // TODO 5. 处理401错误
    // 错误的特殊情况 => 401 权限不足 或 token 过期 => 拦截到登录
    if (err.response?.status === 401) {
      const key = `open${Date.now()}`
      notification.open({
        message: '登录状态异常',
        description: '登录令牌已过期，请重新登录',
        placement: 'top',
        icon: () => h(FrownOutlined, { style: 'color:rgb(233, 45, 16)' }),
        duration: 0,
        // onClick: () => {
        //   // 可选：点击通知时的行为，这里可以设置为立即重定向，但通常不这么做
        //   // router.push('/login');
        // },
        btn: () =>
          h(
            Button,
            {
              type: 'primary',
              size: 'default',
              onClick: () => {
                notification.close(key)
                setTimeout(() => {
                  router.push('/login')
                }, 1000) // 3秒后重定向到登录页面
              }
            },
            { default: () => '重新登录' }
          ),
        key,
        onClose: () => {
          setTimeout(() => {
            router.push('/login')
          }, 1000) // 3秒后重定向到登录页面
        }
      })
    }

    // 错误的默认情况 => 只要给提示
    message.error(
      err.response.data.msg || err.response.data.error || '服务异常'
    )
    return Promise.reject(err)
  }
)

export default instance
export { baseURL }
